package wc;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.filechooser.FileSystemView;

public class DealParameter {
	String[] input = null;

	DealParameter(String[] input) {
		this.input = input;
	}

	public void dealParameter() throws IOException {// 将用户输入的参数进行处理
		// 单独处理-x参数
		GetResult gr;
		if (input.length == 1 && input[0].equals("-x")) {
           new ChooseFile();
               
		} else {
			
			String parentPath = null;// 获得上级文件路径
			FileSystemView fsv = FileSystemView.getFileSystemView();
			File com=fsv.getHomeDirectory();  
			parentPath = com.getPath();
			//File path = new File("..");
		//	parentPath = path.getCanonicalPath();

			// 创建当前文件目录，用于有参数-s时得到当前目录下的文件
			File currentFile = new File(parentPath);
			if (currentFile.isDirectory() == false) {
				System.out.println("currentFile is not a directory");
				System.exit(1);
			}

			ArrayList<String> choice = new ArrayList<String>();// 用于保存不同类型的参数
			ArrayList<String> fileName = new ArrayList<String>();// 用于保存用户传入的参数中的所有的文件名
			ArrayList<String> fileFormat = new ArrayList<String>();// 用于保存用户传入的参数中所有指定的通配符
			ArrayList<File> aimFile = new ArrayList<File>();// 用于存储目录下的文件

			boolean isExistFileFormat = false;// 用于标记是否有制定的统配符
			for (String cell : input) {// 将参数分类
				if (cell.startsWith("-")) {
					choice.add(cell);// 保存带“-”的选项
				} else if (cell.startsWith("*")) {
					if (cell.equals("*.txt") || cell.equals("*.c") || cell.equals("*.java") || cell.equals("doc")) {
						isExistFileFormat = true;
						int begin = cell.indexOf(".");
						String subString = cell.substring(begin);
						fileFormat.add(subString);// 保存指定处理的文件格式，如：*.txt
					} else {
						System.out.println("通配符格式不正确");
						System.exit(1);
					}
				} else if (cell.endsWith(".txt") || cell.endsWith(".c") || cell.endsWith(".doc")
						|| cell.endsWith(".java")) {
					fileName.add(cell);// 保存文件名
				} else {
					System.out.println("输入格式有误");
					System.exit(1);
				}
			}
			boolean isExistS = false;// 用于判断是否有停用词表选项
			boolean isExistE = false;// 用于判断是否有递归操作文件
			// 如果有-s选项，则递归遍历当前目录下的所有非文件夹文件，并循环调用getFileContent（）统计文件内容
			for (String cell : choice) {
				if (cell.equals("-s")) {
					isExistS = true;
					if (cell.equals("-e")) {// 是否停用词表
						isExistE = true;
					}
				}
			}

			if (isExistS == true) {// 递归读取当前文件目录下的文件
				File[] fileList = currentFile.listFiles();// 获得当前目录下的所有文件

				for (File cell : fileList) {

					if (isExistFileFormat == false && cell.isDirectory() == false) {// 没有指定处理的通配符
						if (cell.getName().endsWith(".txt") || cell.getName().endsWith(".c")
								|| cell.getName().endsWith(".doc") || cell.getName().endsWith(".java")) {
							aimFile.add(cell);
						}
					} else { // 如果有指定要处理的统配符
						boolean isAimFile = false;
						for (String format : fileFormat) {
							if (cell.getName().endsWith(format)) {
								isAimFile = true;// 如果是指定文件则标记为true
							}
						}
						if (isAimFile == true && cell.isDirectory() == false) {// 判断是指定文件的话就装入集合中
							if (cell.getName().endsWith(".txt") || cell.getName().endsWith(".c")
									|| cell.getName().endsWith(".doc") || cell.getName().endsWith(".java")) {
								aimFile.add(cell);
							}
						}
					}
				}
				for (File file : aimFile) {

					if (isExistE == true && file.getName().equals(fileName.get(fileName.size() - 1))) {// 停用词表的文件统计
						gr = new GetResult();
						if (fileName.size() == 2 || fileName.size() == 1) {// 如果有两个文件名，则表示用户指定输出文件

							gr.outputFileName(fileName.get(0));
						}
						gr.getFileContent(file.getAbsolutePath());
						System.out.println(file.getName() + ":");// 列出对应的文件名
						for (String cell : choice) {
							if (cell.equals("-c")) {
								gr.dealChoices("c");
							} else if (cell.equals("-l")) {
								gr.dealChoices("l");
							} else if (cell.equals("-a")) {
								gr.dealChoices("a");
							}
						}
					} else {// 当前文件不是一个目录则可以进行统计
						gr = new GetResult();
						if (fileName.size() >= 1) {
							gr.outputFileName(fileName.get(0));
						}
						gr.getFileContent(file.getAbsolutePath());
						System.out.println(file.getName() + ":");
						for (String cell : choice) {
							if (cell.equals("-c")) {
								gr.dealChoices("c");
							} else if (cell.equals("-w")) {
								gr.dealChoices("w");
							} else if (cell.equals("-l")) {
								gr.dealChoices("l");
							} else if (cell.equals("-a")) {
								gr.dealChoices("a");
							}
						}
					}
				}
			} else { // 如果没有递归调用选项，则按一般的输入来处理
				gr = new GetResult();
				if (fileName.size() == 2) {// 如果用户有输入指定输出的文件，则先调用outputfilename将文件名传入过去
					gr.outputFileName(fileName.get(1));
				}
				if (fileName.size() == 0) {
					System.out.println("没有要统计的文件");
					System.exit(1);
				}
				gr.getFileContent(parentPath + "/" + fileName.get(0));// 传入统计的文件路径
				System.out.println(fileName.get(0) + ":");
				for (String cell : choice) {
					if (cell.equals("-c")) {
						gr.dealChoices("c");
					} else if (cell.equals("-w")) {
						gr.dealChoices("w");
					} else if (cell.equals("-l")) {
						gr.dealChoices("l");
					} else if (cell.equals("-a")) {
						gr.dealChoices("a");
					}
				}
			}
		}
	}
}
